package com.samtech.ftp.service;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;

import org.apache.commons.net.ftp.FTPFile;





@SuppressWarnings("unchecked")
public interface FtpService {
    /**
     * connectServer 连接ftp服务器
     * 
     * @throws java.io.IOException
     * @param path
     *            文件夹，空代表根目录( ftp服务下主目录的子目录 )
     * @param password
     *            密码
     * @param user
     *            登陆用户
     * @param server
     *            服务器地址
     * @param passiveModeTransfer
     *            是否是被动模式.
     * @throws FtpException
     */
    public abstract void connectServer(String server, String user, String password, boolean passiveModeTransfer) throws 
    FtpException;

    /**
     * upload 上传文件
     * 
     * @throws java.lang.Exception
     * @return -1 文件不存在 -2 文件内容为空 >0 成功上传，返回文件的大小
     * @param newname
     *            上传后的新文件名
     * @param localFile
     *            上传的文件路径
     * @throws IOException
     * @throws FtpException
     */
    public abstract void upload(String localFile, String newFileName) throws  FtpException;

    /**
     * upload 以当前文件名进行上传.
     * 
     * @throws java.lang.Exception
     * @return
     * @param filename
     * @throws IOException
     * @throws FtpException
     */
    public abstract void upload(String localFile) throws  FtpException;

    /**
     * download 从ftp下载文件到本地
     * 
     * @throws java.lang.Exception
     * @return
     * @param newfilename
     *            本地生成的文件名 (文件名要包含路径)
     * @param filename
     *            服务器上的文件名
     * @throws IOException
     * @throws FtpException
     */
    public abstract void downloadAndDeleteFile(String fileName, String newFileName) throws  FtpException;

    /**
     * download 从ftp下载文件到本地
     * 
     * @throws java.lang.Exception
     * @return
     * @param localFile
     *            本地生成的文件名 (文件名要包含路径,否则为当前目录)
     * @param filename
     *            服务器上的文件名
     * @throws IOException
     * @throws FtpException
     */
    public abstract void download(String fileName, String localFile) throws  FtpException;
    /**
     * 取得某个目录下的所有文件列表, '.' 表示当前目录
     * 
     * @throws ParseException
     * @throws IOException
     * @throws FtpException
     * 
     */
    public abstract List<FTPFile> getFileInfos(String path) throws  FtpException;
    
    /**
     * 取得某个目录下的所有文件列表, '.' 表示当前目录
     * 
     * @throws ParseException
     * @throws IOException
     * @throws FtpException
     * 
     */
    public abstract List<String> getFileList(String path) throws  FtpException;

    /**
     * 判断文件是否存在
     * 
     * @param path
     *            Ftp 路径 "." 代表当前路径
     * @param filename
     *            文件名
     * @return
     * @throws IOException
     * @throws FtpException
     * @throws ParseException
     */
    public abstract boolean isFileExist(String path, String fileName) throws  FtpException;

    /**
     * 判断当前目录下文件是否存在
     * 
     * @param filename
     *            文件名
     * @return
     * @throws IOException
     * @throws FtpException
     * @throws ParseException
     */
    public abstract boolean isFileExist(String fileName) throws  FtpException;

    /**
     * closeServer 断开与ftp服务器的链接
     * 
     * @throws java.io.IOException
     * @throws FtpException
     */
    public abstract void closeServer() throws  FtpException;

    /**
     * 从服务器上删除文件
     * 
     * @param filename
     *            指定要删除的文件名
     * @throws IOException
     * @throws FtpException
     */
    public abstract void deleteFile(String fileName) throws  FtpException;

    public String getHost();

    public String getPath();}
